#include "bsp_config.h"

//共阴极数码管段码，不带小数点  但是实际上使用的却是共阳数码管  主要是因为TM1638芯片的原因,   1表示显示  0表示不显示
uint8_t const TM1638_Arr_SEG[] = { //数码管显示字符转换表  这里存储成常变量
    0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
    0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71}; //0-F

//存储最终要写入到TM1638显存中的数据16byte
uint8_t TM1638_Arr_SEG_Display[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};


/***************************************************************************************/
static void TM1638_Write_Byte(uint8_t byte) //TM1638单写数据
{
  uint8_t i;
  for (i = 0; i < 8; i++)
  {
    CLK_0(); //CLK=0
    // ets_delay_us(TM1638_CLK);
    if (byte & 0x01)
    {
      DIO_1(); //DIO=1
    }
    else
    {
      DIO_0(); //DIO=0
    }
    byte >>= 1;
    CLK_1(); //CLK=1
    // ets_delay_us(TM1638_CLK);
  }
}
/***************************************************************************************/
/***************************************************************************************/
/**
  * TM1638写数据/命令函数
  * 参数：data：要写入的8位数据
  * 返回值：无
  */
static void TM1638_Write_Data(uint8_t data) //TM1638写数据函数
{
  STB_0();
  // ets_delay_us(TM1638_CLK);
  TM1638_Write_Byte(data);
  STB_1();
  // ets_delay_us(TM1638_CLK);
}

void (*TM1638_Write_Cmd)(uint8_t) = TM1638_Write_Data; //给函数起一个别名，函数指针

//就是TM1638_Write_Cmd和TM1638_Write_Data其实是同一个函数
/***************************************************************************************/

/***************************************************************************************/
/**
	* TM1638写地址+数码组合函数，用于固定地址显示
  * 参数：cmd：要写入的8位数据
  * 返回值：无
  */
static void TM1638_Write_Addr_Bond(uint8_t addr, uint8_t data) //TM1638写数据函数
{
  STB_0();
  // ets_delay_us(TM1638_CLK);
  TM1638_Write_Byte(addr);
  TM1638_Write_Byte(data);
  STB_1();
  // ets_delay_us(TM1638_CLK);
}
/***************************************************************************************/

/***************************************************************************************/
//写1表示亮  写0表示灭
/**
 *  @brief 显示刷新函数
 *  @param 无
 *  @brief 无  
 */
void TM1638_Show_Refresh(void)
{
  TM1638_Brightness(ConfigParam.RepelSetting.repel_sett_data.backlight);

  TM1638_Write_Addr_Bond(0XC0 + 0x00, TM1638_Arr_SEG_Display[0x00]);
  TM1638_Write_Addr_Bond(0XC0 + 0x02, TM1638_Arr_SEG_Display[0x02]);
  TM1638_Write_Addr_Bond(0XC0 + 0x04, TM1638_Arr_SEG_Display[0x04]);
  TM1638_Write_Addr_Bond(0XC0 + 0x06, TM1638_Arr_SEG_Display[0x06]);

  TM1638_Write_Addr_Bond(0XC0 + 0x08, TM1638_Arr_SEG_Display[0x08]);
  TM1638_Write_Addr_Bond(0XC0 + 0x0A, TM1638_Arr_SEG_Display[0x0A]);
  TM1638_Write_Addr_Bond(0XC0 + 0x0C, TM1638_Arr_SEG_Display[0x0C]);
  TM1638_Write_Addr_Bond(0XC0 + 0x0E, TM1638_Arr_SEG_Display[0x0E]);

  TM1638_Write_Addr_Bond(0XC0 + 0x01, TM1638_Arr_SEG_Display[0x01]);
  TM1638_Write_Addr_Bond(0XC0 + 0x03, TM1638_Arr_SEG_Display[0x03]);
  TM1638_Write_Addr_Bond(0XC0 + 0x05, TM1638_Arr_SEG_Display[0x05]);
  TM1638_Write_Addr_Bond(0XC0 + 0x07, TM1638_Arr_SEG_Display[0x07]);

  TM1638_Write_Addr_Bond(0XC0 + 0x09, TM1638_Arr_SEG_Display[0x09]);
  TM1638_Write_Addr_Bond(0XC0 + 0x0B, TM1638_Arr_SEG_Display[0x0B]);
  TM1638_Write_Addr_Bond(0XC0 + 0x0D, TM1638_Arr_SEG_Display[0x0D]);
  TM1638_Write_Addr_Bond(0XC0 + 0x0F, TM1638_Arr_SEG_Display[0x0F]);
}
/***************************************************************************************/

/***************************************************************************************/
//写1表示亮  写0表示灭

void LED_AirConditioner(uint8_t en)
{
  if (en)
  {                                       //空调LED开
    TM1638_Arr_SEG_Display[0x00] |= 0x80; //bit7 置位
  }
  else
  {                                          //空调LED关
    TM1638_Arr_SEG_Display[0x00] &= ~(0x80); //bit7 复位
  }
}

void LED_Maternal(uint8_t en)
{
  if (en)
  {                                       //母婴LED开
    TM1638_Arr_SEG_Display[0x02] |= 0x80; //bit7 置位
  }
  else
  {                                          //母婴LED关
    TM1638_Arr_SEG_Display[0x02] &= ~(0x80); //bit7 复位
  }
}

/**
 *  @brief 显示刷新函数  //potion(药水) poison(表示中毒的意思)  这个属于最底层的函数
 *  @param quantity 显示当前剩余药量 0:表示没有药了  1:表示只有10%   10:表示有100%
 *  @brief 无  
 */
void LED_Potion_Quantity(uint8_t quantity)
{
  switch (quantity)
  {
  case 100:    //100表示全部关闭
    TM1638_Arr_SEG_Display[0x0E] &= ~(0x08); //1    //这一位应该是QTY

    TM1638_Arr_SEG_Display[0x01] &= ~(0x01); //1
    TM1638_Arr_SEG_Display[0x03] &= ~(0x01); //2
    TM1638_Arr_SEG_Display[0x05] &= ~(0x01); //3
    TM1638_Arr_SEG_Display[0x07] &= ~(0x01); //4

    TM1638_Arr_SEG_Display[0x09] &= ~(0x01); //5
    TM1638_Arr_SEG_Display[0x0B] &= ~(0x01); //6
    TM1638_Arr_SEG_Display[0x0D] &= ~(0x01); //7
    TM1638_Arr_SEG_Display[0x0F] &= ~(0x01); //8

    TM1638_Arr_SEG_Display[0x01] &= ~(0x02); //9
    TM1638_Arr_SEG_Display[0x03] &= ~(0x02); //10
    break;    
  case 0:
    TM1638_Arr_SEG_Display[0x0E] |= (0x08); //1    //这一位应该是QTY显示

    TM1638_Arr_SEG_Display[0x01] &= ~(0x01); //1
    TM1638_Arr_SEG_Display[0x03] &= ~(0x01); //2
    TM1638_Arr_SEG_Display[0x05] &= ~(0x01); //3
    TM1638_Arr_SEG_Display[0x07] &= ~(0x01); //4

    TM1638_Arr_SEG_Display[0x09] &= ~(0x01); //5
    TM1638_Arr_SEG_Display[0x0B] &= ~(0x01); //6
    TM1638_Arr_SEG_Display[0x0D] &= ~(0x01); //7
    TM1638_Arr_SEG_Display[0x0F] &= ~(0x01); //8

    TM1638_Arr_SEG_Display[0x01] &= ~(0x02); //9
    TM1638_Arr_SEG_Display[0x03] &= ~(0x02); //10
    break;
  case 1:
    TM1638_Arr_SEG_Display[0x0E] |= (0x08); //1

    TM1638_Arr_SEG_Display[0x01] |= (0x01);  //1
    TM1638_Arr_SEG_Display[0x03] &= ~(0x01); //2
    TM1638_Arr_SEG_Display[0x05] &= ~(0x01); //3
    TM1638_Arr_SEG_Display[0x07] &= ~(0x01); //4

    TM1638_Arr_SEG_Display[0x09] &= ~(0x01); //5
    TM1638_Arr_SEG_Display[0x0B] &= ~(0x01); //6
    TM1638_Arr_SEG_Display[0x0D] &= ~(0x01); //7
    TM1638_Arr_SEG_Display[0x0F] &= ~(0x01); //8

    TM1638_Arr_SEG_Display[0x01] &= ~(0x02); //9
    TM1638_Arr_SEG_Display[0x03] &= ~(0x02); //10
    break;
  case 2:
    TM1638_Arr_SEG_Display[0x0E] |= (0x08); //1

    TM1638_Arr_SEG_Display[0x01] |= (0x01);  //1
    TM1638_Arr_SEG_Display[0x03] |= (0x01);  //2
    TM1638_Arr_SEG_Display[0x05] &= ~(0x01); //3
    TM1638_Arr_SEG_Display[0x07] &= ~(0x01); //4

    TM1638_Arr_SEG_Display[0x09] &= ~(0x01); //5
    TM1638_Arr_SEG_Display[0x0B] &= ~(0x01); //6
    TM1638_Arr_SEG_Display[0x0D] &= ~(0x01); //7
    TM1638_Arr_SEG_Display[0x0F] &= ~(0x01); //8

    TM1638_Arr_SEG_Display[0x01] &= ~(0x02); //9
    TM1638_Arr_SEG_Display[0x03] &= ~(0x02); //10
    break;
  case 3:
    TM1638_Arr_SEG_Display[0x0E] |= (0x08); //1

    TM1638_Arr_SEG_Display[0x01] |= (0x01);  //1
    TM1638_Arr_SEG_Display[0x03] |= (0x01);  //2
    TM1638_Arr_SEG_Display[0x05] |= (0x01);  //3
    TM1638_Arr_SEG_Display[0x07] &= ~(0x01); //4

    TM1638_Arr_SEG_Display[0x09] &= ~(0x01); //5
    TM1638_Arr_SEG_Display[0x0B] &= ~(0x01); //6
    TM1638_Arr_SEG_Display[0x0D] &= ~(0x01); //7
    TM1638_Arr_SEG_Display[0x0F] &= ~(0x01); //8

    TM1638_Arr_SEG_Display[0x01] &= ~(0x02); //9
    TM1638_Arr_SEG_Display[0x03] &= ~(0x02); //10
    break;
  case 4:
    TM1638_Arr_SEG_Display[0x0E] |= (0x08); //1

    TM1638_Arr_SEG_Display[0x01] |= (0x01); //1
    TM1638_Arr_SEG_Display[0x03] |= (0x01); //2
    TM1638_Arr_SEG_Display[0x05] |= (0x01); //3
    TM1638_Arr_SEG_Display[0x07] |= (0x01); //4

    TM1638_Arr_SEG_Display[0x09] &= ~(0x01); //5
    TM1638_Arr_SEG_Display[0x0B] &= ~(0x01); //6
    TM1638_Arr_SEG_Display[0x0D] &= ~(0x01); //7
    TM1638_Arr_SEG_Display[0x0F] &= ~(0x01); //8

    TM1638_Arr_SEG_Display[0x01] &= ~(0x02); //9
    TM1638_Arr_SEG_Display[0x03] &= ~(0x02); //10
    break;
  case 5:
    TM1638_Arr_SEG_Display[0x0E] |= (0x08); //1

    TM1638_Arr_SEG_Display[0x01] |= (0x01); //1
    TM1638_Arr_SEG_Display[0x03] |= (0x01); //2
    TM1638_Arr_SEG_Display[0x05] |= (0x01); //3
    TM1638_Arr_SEG_Display[0x07] |= (0x01); //4

    TM1638_Arr_SEG_Display[0x09] |= (0x01);  //5
    TM1638_Arr_SEG_Display[0x0B] &= ~(0x01); //6
    TM1638_Arr_SEG_Display[0x0D] &= ~(0x01); //7
    TM1638_Arr_SEG_Display[0x0F] &= ~(0x01); //8

    TM1638_Arr_SEG_Display[0x01] &= ~(0x02); //9
    TM1638_Arr_SEG_Display[0x03] &= ~(0x02); //10
    break;
  case 6:
    TM1638_Arr_SEG_Display[0x0E] |= (0x08); //1

    TM1638_Arr_SEG_Display[0x01] |= (0x01); //1
    TM1638_Arr_SEG_Display[0x03] |= (0x01); //2
    TM1638_Arr_SEG_Display[0x05] |= (0x01); //3
    TM1638_Arr_SEG_Display[0x07] |= (0x01); //4

    TM1638_Arr_SEG_Display[0x09] |= (0x01);  //5
    TM1638_Arr_SEG_Display[0x0B] |= (0x01);  //6
    TM1638_Arr_SEG_Display[0x0D] &= ~(0x01); //7
    TM1638_Arr_SEG_Display[0x0F] &= ~(0x01); //8

    TM1638_Arr_SEG_Display[0x01] &= ~(0x02); //9
    TM1638_Arr_SEG_Display[0x03] &= ~(0x02); //10
    break;
  case 7:
    TM1638_Arr_SEG_Display[0x0E] |= (0x08); //1

    TM1638_Arr_SEG_Display[0x01] |= (0x01); //1
    TM1638_Arr_SEG_Display[0x03] |= (0x01); //2
    TM1638_Arr_SEG_Display[0x05] |= (0x01); //3
    TM1638_Arr_SEG_Display[0x07] |= (0x01); //4

    TM1638_Arr_SEG_Display[0x09] |= (0x01);  //5
    TM1638_Arr_SEG_Display[0x0B] |= (0x01);  //6
    TM1638_Arr_SEG_Display[0x0D] |= (0x01);  //7
    TM1638_Arr_SEG_Display[0x0F] &= ~(0x01); //8

    TM1638_Arr_SEG_Display[0x01] &= ~(0x02); //9
    TM1638_Arr_SEG_Display[0x03] &= ~(0x02); //10
    break;
  case 8:
    TM1638_Arr_SEG_Display[0x0E] |= (0x08); //1

    TM1638_Arr_SEG_Display[0x01] |= (0x01); //1
    TM1638_Arr_SEG_Display[0x03] |= (0x01); //2
    TM1638_Arr_SEG_Display[0x05] |= (0x01); //3
    TM1638_Arr_SEG_Display[0x07] |= (0x01); //4

    TM1638_Arr_SEG_Display[0x09] |= (0x01); //5
    TM1638_Arr_SEG_Display[0x0B] |= (0x01); //6
    TM1638_Arr_SEG_Display[0x0D] |= (0x01); //7
    TM1638_Arr_SEG_Display[0x0F] |= (0x01); //8

    TM1638_Arr_SEG_Display[0x01] &= ~(0x02); //9
    TM1638_Arr_SEG_Display[0x03] &= ~(0x02); //10
    break;
  case 9:
    TM1638_Arr_SEG_Display[0x0E] |= (0x08); //1

    TM1638_Arr_SEG_Display[0x01] |= (0x01); //1
    TM1638_Arr_SEG_Display[0x03] |= (0x01); //2
    TM1638_Arr_SEG_Display[0x05] |= (0x01); //3
    TM1638_Arr_SEG_Display[0x07] |= (0x01); //4

    TM1638_Arr_SEG_Display[0x09] |= (0x01); //5
    TM1638_Arr_SEG_Display[0x0B] |= (0x01); //6
    TM1638_Arr_SEG_Display[0x0D] |= (0x01); //7
    TM1638_Arr_SEG_Display[0x0F] |= (0x01); //8

    TM1638_Arr_SEG_Display[0x01] |= (0x02);  //9
    TM1638_Arr_SEG_Display[0x03] &= ~(0x02); //10
    break;
  case 10:
    TM1638_Arr_SEG_Display[0x0E] |= (0x08); //1

    TM1638_Arr_SEG_Display[0x01] |= (0x01); //1
    TM1638_Arr_SEG_Display[0x03] |= (0x01); //2
    TM1638_Arr_SEG_Display[0x05] |= (0x01); //3
    TM1638_Arr_SEG_Display[0x07] |= (0x01); //4

    TM1638_Arr_SEG_Display[0x09] |= (0x01); //5
    TM1638_Arr_SEG_Display[0x0B] |= (0x01); //6
    TM1638_Arr_SEG_Display[0x0D] |= (0x01); //7
    TM1638_Arr_SEG_Display[0x0F] |= (0x01); //8

    TM1638_Arr_SEG_Display[0x01] |= (0x02); //9
    TM1638_Arr_SEG_Display[0x03] |= (0x02); //10
    break;
  default:                                   //默认是0药量的
    TM1638_Arr_SEG_Display[0x0E] |= (0x08); //1

    TM1638_Arr_SEG_Display[0x01] &= ~(0x01); //1
    TM1638_Arr_SEG_Display[0x03] &= ~(0x01); //2
    TM1638_Arr_SEG_Display[0x05] &= ~(0x01); //3
    TM1638_Arr_SEG_Display[0x07] &= ~(0x01); //4

    TM1638_Arr_SEG_Display[0x09] &= ~(0x01); //5
    TM1638_Arr_SEG_Display[0x0B] &= ~(0x01); //6
    TM1638_Arr_SEG_Display[0x0D] &= ~(0x01); //7
    TM1638_Arr_SEG_Display[0x0F] &= ~(0x01); //8

    TM1638_Arr_SEG_Display[0x01] &= ~(0x02); //9
    TM1638_Arr_SEG_Display[0x03] &= ~(0x02); //10
    break;
  }
}

//run
void LED_Run(uint8_t en)
{
  if (en)
  {                                       //运行LED开
    TM1638_Arr_SEG_Display[0x04] |= 0x80; //bit7 置位
  }
  else
  {                                          //运行LED关
    TM1638_Arr_SEG_Display[0x04] &= ~(0x80); //bit7 复位
  }
}

void LED_BLE(uint8_t en)
{
  if (en)
  {                                       //BLE LED开
    TM1638_Arr_SEG_Display[0x06] |= 0x80; //bit7 置位
  }
  else
  {                                          //BLE LED关
    TM1638_Arr_SEG_Display[0x06] &= ~(0x80); //bit7 复位
  }
}

void LED_WiFi(uint8_t en)
{
  if (en)
  {                                       //WiFi LED开
    TM1638_Arr_SEG_Display[0x08] |= 0x80; //bit7 置位
  }
  else
  {                                          //WiFi LED关
    TM1638_Arr_SEG_Display[0x08] &= ~(0x80); //bit7 复位
  }
}

void LED_m(uint8_t en)
{
  if (en)
  {                                       //米 LED开
    TM1638_Arr_SEG_Display[0x0E] |= 0x01; //bit0 置位
  }
  else
  {                                          //米 LED关
    TM1638_Arr_SEG_Display[0x0E] &= ~(0x01); //bit0 复位
  }
}

void LED_m2(uint8_t en)
{
  if (en)
  {                                       //平方米 LED开
    TM1638_Arr_SEG_Display[0x0E] |= 0x04; //bit2 置位
  }
  else
  {                                          //平方米 LED关
    TM1638_Arr_SEG_Display[0x0E] &= ~(0x04); //bit2 复位
  }
}

void LED_Timing(uint8_t en)
{
  if (en)
  {                                       //定时 LED开
    TM1638_Arr_SEG_Display[0x05] |= 0x02; //bit1 置位
  }
  else
  {                                          //定时 LED关
    TM1638_Arr_SEG_Display[0x05] &= ~(0x02); //bit1 复位
  }
}

void LED_Height(uint8_t en)
{
  if (en)
  {                                       //层高 LED开
    TM1638_Arr_SEG_Display[0x0E] |= 0x40; //bit6 置位
  }
  else
  {                                          //层高 LED关
    TM1638_Arr_SEG_Display[0x0E] &= ~(0x40); //bit6 复位
  }
}

void LED_Area(uint8_t en)
{
  if (en)
  {                                       //面积 LED开
    TM1638_Arr_SEG_Display[0x0E] |= 0x20; //bit5 置位
  }
  else
  {                                          //面积 LED关
    TM1638_Arr_SEG_Display[0x0E] &= ~(0x20); //bit5 复位
  }
}

void LED_Aroma(uint8_t en)
{
  if (en)
  {                                       //香薰 LED开
    TM1638_Arr_SEG_Display[0x0E] |= 0x80; //bit7 置位
  }
  else
  {                                          //香薰 LED关
    TM1638_Arr_SEG_Display[0x0E] &= ~(0x80); //bit7 复位
  }
}

void LED_Fumigate(uint8_t en)
{
  if (en)
  {                                       //熏蒸 LED开
    TM1638_Arr_SEG_Display[0x0C] |= 0x80; //bit7 置位
  }
  else
  {                                          //熏蒸 LED关
    TM1638_Arr_SEG_Display[0x0C] &= ~(0x80); //bit7 复位
  }
}

void LED_Repel(uint8_t en)
{
  if (en)
  {                                       //驱蚊 LED开
    TM1638_Arr_SEG_Display[0x0A] |= 0x80; //bit7 置位
  }
  else
  {                                          //驱蚊 LED关
    TM1638_Arr_SEG_Display[0x0A] &= ~(0x80); //bit7 复位
  }
}
/***************************************************************************************/

//写1表示亮  写0表示灭
/***************************************************************************************/
/**
 *  @brief 灭蚊器上部数码管显示函数(主要功能就是将待显示的数字,分解然后存到TM1638_Arr_SEG_Display中)
 *  @param num :待显示的三位数字
 *  @param base :待显示数字的进制
 *  @param dot :待显示的小数点的位置(1-3) 1:表示显示第一个小数点
 *  @param show   0:表示全不显示 1:表示全显示  2:除了第1位外其他全显示 3:除了第2位外其他全显示  4:除了第3位外其他全显示 
 *  @brief 无  
 */
void TM1638_Up_Num_Show(uint16_t num, uint8_t base, uint8_t dot, uint8_t show)
{
  uint8_t TM1638_UP_SEG_DisplayBuff[] = {0x00, 0x00, 0x00}; //灭蚊器上面的三个数码管  这里可以不加static关键字;

  if (show == 1)
  {                                                                          //1:表示全显示
    TM1638_UP_SEG_DisplayBuff[0] = TM1638_Arr_SEG[num / base / base % base]; //相当于seg7
    TM1638_UP_SEG_DisplayBuff[1] = TM1638_Arr_SEG[num / base % base];        //相当于seg6
    TM1638_UP_SEG_DisplayBuff[2] = TM1638_Arr_SEG[num % base];               //相当于seg5

  } //if
  else if (show == 2)
  {
    //2:除了第1位外其他全显示
    // TM1638_UP_SEG_DisplayBuff[0] = TM1638_Arr_SEG[num / base / base % base]; //相当于seg7
    TM1638_UP_SEG_DisplayBuff[0] = 0x00;                              //相当于seg7
    TM1638_UP_SEG_DisplayBuff[1] = TM1638_Arr_SEG[num / base % base]; //相当于seg6
    TM1638_UP_SEG_DisplayBuff[2] = TM1638_Arr_SEG[num % base];        //相当于seg5
  }
  else if (show == 3)
  {
    //3:除了第2位外其他全显示
    TM1638_UP_SEG_DisplayBuff[0] = TM1638_Arr_SEG[num / base / base % base]; //相当于seg7
    // TM1638_UP_SEG_DisplayBuff[1] = TM1638_Arr_SEG[num / base % base];        //相当于seg6
    TM1638_UP_SEG_DisplayBuff[1] = 0x00;                       //相当于seg6
    TM1638_UP_SEG_DisplayBuff[2] = TM1638_Arr_SEG[num % base]; //相当于seg5
  }
  else if (show == 4)
  {
    //4:除了第3位外其他全显示
    TM1638_UP_SEG_DisplayBuff[0] = TM1638_Arr_SEG[num / base / base % base]; //相当于seg7
    TM1638_UP_SEG_DisplayBuff[1] = TM1638_Arr_SEG[num / base % base];        //相当于seg6
    // TM1638_UP_SEG_DisplayBuff[2] = TM1638_Arr_SEG[num % base];               //相当于seg5
    TM1638_UP_SEG_DisplayBuff[2] = 0x00; //相当于seg5
  }
  else if (show == 0)
  {
    //0:表示全不显示
    TM1638_UP_SEG_DisplayBuff[0] = 0x00;
    TM1638_UP_SEG_DisplayBuff[1] = 0x00;
    TM1638_UP_SEG_DisplayBuff[2] = 0x00;
  }

  //下面还得将TM1638_UP_SEG_DisplayBuff中的数据转换成数码管可以显示的方式
  TM1638_Arr_SEG_Display[0x00] &= 0xF8; //将bit0~bit1 清零        //GRID1
  TM1638_Arr_SEG_Display[0x02] &= 0xF8; //将bit0~bit1 清零        //GRID2
  TM1638_Arr_SEG_Display[0x04] &= 0xF8; //将bit0~bit1 清零        //GRID3
  TM1638_Arr_SEG_Display[0x06] &= 0xF8; //将bit0~bit1 清零        //GRID4
  TM1638_Arr_SEG_Display[0x08] &= 0xF8; //将bit0~bit1 清零        //GRID5
  TM1638_Arr_SEG_Display[0x0A] &= 0xF8; //将bit0~bit1 清零        //GRID6
  TM1638_Arr_SEG_Display[0x0C] &= 0xF8; //将bit0~bit1 清零        //GRID7
  // TM1638_Arr_SEG_Display[0x0E] &= 0xF8; //将将bit0~bit1 清零        //GRID8

  switch (dot) //小数点是一定要显示的
  {
  case 0:                                    //小数点不显示
    TM1638_Arr_SEG_Display[0x0E] &= ~(0x02); //bit1 清零
    break;
  case 1:                                   //小数点显示
    TM1638_Arr_SEG_Display[0x0E] |= (0x02); //bit1 置位
    break;
  default:                                   //其它情况不显示小数点
    TM1638_Arr_SEG_Display[0x0E] &= ~(0x02); //bit1 清零
    break;
  }

  {
    if (TM1638_UP_SEG_DisplayBuff[2] & 0x01) //GRID1
    {
      TM1638_Arr_SEG_Display[0x00] |= 0x04; //bit6 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[2] & 0x02) //GRID2
    {
      TM1638_Arr_SEG_Display[0x02] |= 0x04; //bit6 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[2] & 0x04) //GRID3
    {
      TM1638_Arr_SEG_Display[0x04] |= 0x04; //bit6 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[2] & 0x08) //GRID4
    {
      TM1638_Arr_SEG_Display[0x06] |= 0x04; //bit6 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[2] & 0x10) //GRID5
    {
      TM1638_Arr_SEG_Display[0x08] |= 0x04; //bit6 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[2] & 0x20) //GRID6
    {
      TM1638_Arr_SEG_Display[0x0A] |= 0x04; //bit6 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[2] & 0x40) //GRID7
    {
      TM1638_Arr_SEG_Display[0x0C] |= 0x04; //bit6 置位
    }
    // if (TM1638_UP_SEG_DisplayBuff[2] & 0x80) //GRID8
    // {
    //   TM1638_Arr_SEG_Display[0x0E] |= 0x04; //bit6 置位
    // }
  }

  {
    if (TM1638_UP_SEG_DisplayBuff[1] & 0x01) //GRID1
    {
      TM1638_Arr_SEG_Display[0x00] |= 0x02; //bit5 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[1] & 0x02) //GRID2
    {
      TM1638_Arr_SEG_Display[0x02] |= 0x02; //bit5 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[1] & 0x04) //GRID3
    {
      TM1638_Arr_SEG_Display[0x04] |= 0x02; //bit5 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[1] & 0x08) //GRID4
    {
      TM1638_Arr_SEG_Display[0x06] |= 0x02; //bit5 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[1] & 0x10) //GRID5
    {
      TM1638_Arr_SEG_Display[0x08] |= 0x02; //bit5 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[1] & 0x20) //GRID6
    {
      TM1638_Arr_SEG_Display[0x0A] |= 0x02; //bit5 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[1] & 0x40) //GRID7
    {
      TM1638_Arr_SEG_Display[0x0C] |= 0x02; //bit5 置位
    }
    // if (TM1638_UP_SEG_DisplayBuff[1] & 0x80) //GRID8
    // {
    //   TM1638_Arr_SEG_Display[0x0E] |= 0x02; //bit5 置位
    // }
  }

  {
    if (TM1638_UP_SEG_DisplayBuff[0] & 0x01) //GRID1
    {
      TM1638_Arr_SEG_Display[0x00] |= 0x01; //bit4 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[0] & 0x02) //GRID2
    {
      TM1638_Arr_SEG_Display[0x02] |= 0x01; //bit4 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[0] & 0x04) //GRID3
    {
      TM1638_Arr_SEG_Display[0x04] |= 0x01; //bit4 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[0] & 0x08) //GRID4
    {
      TM1638_Arr_SEG_Display[0x06] |= 0x01; //bit4 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[0] & 0x10) //GRID5
    {
      TM1638_Arr_SEG_Display[0x08] |= 0x01; //bit4 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[0] & 0x20) //GRID6
    {
      TM1638_Arr_SEG_Display[0x0A] |= 0x01; //bit4 置位
    }
    if (TM1638_UP_SEG_DisplayBuff[0] & 0x40) //GRID7
    {
      TM1638_Arr_SEG_Display[0x0C] |= 0x01; //bit4 置位
    }
    // if (TM1638_UP_SEG_DisplayBuff[0] & 0x80) //GRID8
    // {
    //   TM1638_Arr_SEG_Display[0x0E] |= 0x01; //bit4 置位
    // }
  }
}
/***************************************************************************************/

/***************************************************************************************/
/**
 *  @brief 灭蚊器下部数码管显示函数(主要功能就是将待显示的数字,分解然后存到TM1638_Arr_SEG_Display中)
 *  @param hour :待显示小时
 *  @param minute :待显示分钟
 *  @param show :0:表示不显示 1表示全显示  2:表示小时不显示,分钟显示  3:表示小时显示,分钟不显示 4:显示ON 5:显示OFF
 *  @brief 无  
 */
void TM1638_Down_Num_Show(uint16_t hour, uint16_t minute, uint8_t show)
{
  static uint8_t TM1638_DOWN_SEG_DisplayBuff[] = {0x00, 0x00, 0x00, 0x00}; //灭蚊器下面的四个数码管   这里写static的形式很重要

  //下面还得将TM1638_Down_SEG_DisplayBuff中的数据转换成数码管可以显示的方式
  TM1638_Arr_SEG_Display[0x00] &= 0x87; //将bit4~bit6 清零        //GRID1
  TM1638_Arr_SEG_Display[0x02] &= 0x87; //将bit4~bit6 清零        //GRID2
  TM1638_Arr_SEG_Display[0x04] &= 0x87; //将bit4~bit6 清零        //GRID3
  TM1638_Arr_SEG_Display[0x06] &= 0x87; //将bit4~bit6 清零        //GRID4
  TM1638_Arr_SEG_Display[0x08] &= 0x87; //将bit4~bit6 清零        //GRID5
  TM1638_Arr_SEG_Display[0x0A] &= 0x87; //将bit4~bit6 清零        //GRID6
  TM1638_Arr_SEG_Display[0x0C] &= 0x87; //将bit4~bit6 清零        //GRID7
  // TM1638_Arr_SEG_Display[0x0E] &= 0x87; //将bit4~bit6 清零        //GRID8

  if (show == 1)
  {
    //对应seg1~seg2
    TM1638_DOWN_SEG_DisplayBuff[0] = TM1638_Arr_SEG[hour / 10];   //相当于seg1
    TM1638_DOWN_SEG_DisplayBuff[1] = TM1638_Arr_SEG[hour % 10];   //相当于seg2  冒号对应段
                                                                  //对应seg3~seg4
    TM1638_DOWN_SEG_DisplayBuff[2] = TM1638_Arr_SEG[minute / 10]; //相当于seg3
    TM1638_DOWN_SEG_DisplayBuff[3] = TM1638_Arr_SEG[minute % 10]; //相当于seg4

      TM1638_Arr_SEG_Display[0x0E] |= 0x10; //冒号始终显示
  }                                                               //if
  else if (show == 2)
  {                                                               //小时不显示,分钟显示,冒号显示
                                                                  //对应seg1~seg2
    TM1638_DOWN_SEG_DisplayBuff[0] = 0x00;                        //相当于seg1
    TM1638_DOWN_SEG_DisplayBuff[1] = 0x00;                        //相当于seg2  冒号对应段
                                                                  //对应seg3~seg4
    TM1638_DOWN_SEG_DisplayBuff[2] = TM1638_Arr_SEG[minute / 10]; //相当于seg3
    TM1638_DOWN_SEG_DisplayBuff[3] = TM1638_Arr_SEG[minute % 10]; //相当于seg4

      TM1638_Arr_SEG_Display[0x0E] |= 0x10; //冒号始终显示
  }
  else if (show == 3)
  {                                                             //分钟不显示,小时显示,冒号显示
                                                                //对应seg1~seg2
    TM1638_DOWN_SEG_DisplayBuff[0] = TM1638_Arr_SEG[hour / 10]; //相当于seg1
    TM1638_DOWN_SEG_DisplayBuff[1] = TM1638_Arr_SEG[hour % 10]; //相当于seg2  冒号对应段
                                                                //对应seg3~seg4
    TM1638_DOWN_SEG_DisplayBuff[2] = 0x00;                      //相当于seg3
    TM1638_DOWN_SEG_DisplayBuff[3] = 0x00;                      //相当于seg4

      TM1638_Arr_SEG_Display[0x0E] |= 0x10; //冒号始终显示
  }
  else if (show == 0)
  {
    TM1638_DOWN_SEG_DisplayBuff[0] = 0x00;
    TM1638_DOWN_SEG_DisplayBuff[1] = 0x00;
    TM1638_DOWN_SEG_DisplayBuff[2] = 0x00;
    TM1638_DOWN_SEG_DisplayBuff[3] = 0x00;
  } //elseif

  if (show == 4) //ON
  {
    TM1638_DOWN_SEG_DisplayBuff[0] = 0x00;
    TM1638_DOWN_SEG_DisplayBuff[1] = 0x00;
    TM1638_DOWN_SEG_DisplayBuff[2] = 0x00;
    TM1638_DOWN_SEG_DisplayBuff[3] = 0x00;

    // TM1638_Arr_SEG_Display[0x0E] &= (~0x10); //冒号不显示

    //O 
    TM1638_Arr_SEG_Display[0x00] |= 0x10;    //a 
    TM1638_Arr_SEG_Display[0x02] |= 0x10;    //b 
    TM1638_Arr_SEG_Display[0x04] |= 0x10;    //c
    TM1638_Arr_SEG_Display[0x06] |= 0x10;    //d 
    TM1638_Arr_SEG_Display[0x08] |= 0x10;    //e
    TM1638_Arr_SEG_Display[0x0A] |= 0x10;    //f 
    // TM1638_Arr_SEG_Display[0x0C] |= 0x10;    //g

    //N
    TM1638_Arr_SEG_Display[0x00] |= 0x20;    //a 
    TM1638_Arr_SEG_Display[0x02] |= 0x20;    //b 
    TM1638_Arr_SEG_Display[0x04] |= 0x20;    //c
    // TM1638_Arr_SEG_Display[0x06] |= 0x20;    //d 
    TM1638_Arr_SEG_Display[0x08] |= 0x20;    //e
    TM1638_Arr_SEG_Display[0x0A] |= 0x20;    //f
    // TM1638_Arr_SEG_Display[0x0C] |= 0x20;    //g 
  }
  else if (show == 5) //OFF
  {
    TM1638_DOWN_SEG_DisplayBuff[0] = 0x00;
    TM1638_DOWN_SEG_DisplayBuff[1] = 0x00;
    TM1638_DOWN_SEG_DisplayBuff[2] = 0x00;
    TM1638_DOWN_SEG_DisplayBuff[3] = 0x00;

    // TM1638_Arr_SEG_Display[0x0E] &= (~0x10); //冒号不显示

    //O 
    TM1638_Arr_SEG_Display[0x00] |= 0x10;    //a 
    TM1638_Arr_SEG_Display[0x02] |= 0x10;    //b 
    TM1638_Arr_SEG_Display[0x04] |= 0x10;    //c
    TM1638_Arr_SEG_Display[0x06] |= 0x10;    //d 
    TM1638_Arr_SEG_Display[0x08] |= 0x10;    //e
    TM1638_Arr_SEG_Display[0x0A] |= 0x10;    //f 
    // TM1638_Arr_SEG_Display[0x0C] |= 0x10;    //g

    //F
    TM1638_Arr_SEG_Display[0x00] |= 0x20;    //a 
    // TM1638_Arr_SEG_Display[0x02] |= 0x20;    //b 
    // TM1638_Arr_SEG_Display[0x04] |= 0x20;    //c
    // TM1638_Arr_SEG_Display[0x06] |= 0x20;    //d 
    TM1638_Arr_SEG_Display[0x08] |= 0x20;    //e
    TM1638_Arr_SEG_Display[0x0A] |= 0x20;    //f
    TM1638_Arr_SEG_Display[0x0C] |= 0x20;    //g 

    //F
    TM1638_Arr_SEG_Display[0x00] |= 0x40;    //a 
    // TM1638_Arr_SEG_Display[0x02] |= 0x40;    //b 
    // TM1638_Arr_SEG_Display[0x04] |= 0x40;    //c
    // TM1638_Arr_SEG_Display[0x06] |= 0x40;    //d 
    TM1638_Arr_SEG_Display[0x08] |= 0x40;    //e
    TM1638_Arr_SEG_Display[0x0A] |= 0x40;    //f
    TM1638_Arr_SEG_Display[0x0C] |= 0x40;    //g 
  }

  {
    if (TM1638_DOWN_SEG_DisplayBuff[3] & 0x01) //GRID1
    {
      TM1638_Arr_SEG_Display[0x00] |= 0x40; //bit3 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[3] & 0x02) //GRID2
    {
      TM1638_Arr_SEG_Display[0x02] |= 0x40; //bit3 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[3] & 0x04) //GRID3
    {
      TM1638_Arr_SEG_Display[0x04] |= 0x40; //bit3 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[3] & 0x08) //GRID4
    {
      TM1638_Arr_SEG_Display[0x06] |= 0x40; //bit3 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[3] & 0x10) //GRID5
    {
      TM1638_Arr_SEG_Display[0x08] |= 0x40; //bit3 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[3] & 0x20) //GRID6
    {
      TM1638_Arr_SEG_Display[0x0A] |= 0x40; //bit3 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[3] & 0x40) //GRID7
    {
      TM1638_Arr_SEG_Display[0x0C] |= 0x40; //bit3 置位
    }
    // if (TM1638_DOWN_SEG_DisplayBuff[3] & 0x80) //GRID8
    // {
    //   TM1638_Arr_SEG_Display[0x0E] |= 0x40; //bit3 置位
    // }
  }

  {
    if (TM1638_DOWN_SEG_DisplayBuff[2] & 0x01) //GRID1
    {
      TM1638_Arr_SEG_Display[0x00] |= 0x20; //bit2 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[2] & 0x02) //GRID2
    {
      TM1638_Arr_SEG_Display[0x02] |= 0x20; //bit2 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[2] & 0x04) //GRID3
    {
      TM1638_Arr_SEG_Display[0x04] |= 0x20; //bit2 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[2] & 0x08) //GRID4
    {
      TM1638_Arr_SEG_Display[0x06] |= 0x20; //bit2 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[2] & 0x10) //GRID5
    {
      TM1638_Arr_SEG_Display[0x08] |= 0x20; //bit2 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[2] & 0x20) //GRID6
    {
      TM1638_Arr_SEG_Display[0x0A] |= 0x20; //bit2 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[2] & 0x40) //GRID7
    {
      TM1638_Arr_SEG_Display[0x0C] |= 0x20; //bit2 置位
    }
    // if (TM1638_DOWN_SEG_DisplayBuff[2] & 0x80) //GRID8
    // {
    //   TM1638_Arr_SEG_Display[0x0E] |= 0x20; //bit2 置位
    // }
  }

  {
    if (TM1638_DOWN_SEG_DisplayBuff[1] & 0x01) //GRID1
    {
      TM1638_Arr_SEG_Display[0x00] |= 0x10; //bit1 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[1] & 0x02) //GRID2
    {
      TM1638_Arr_SEG_Display[0x02] |= 0x10; //bit1 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[1] & 0x04) //GRID3
    {
      TM1638_Arr_SEG_Display[0x04] |= 0x10; //bit1 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[1] & 0x08) //GRID4
    {
      TM1638_Arr_SEG_Display[0x06] |= 0x10; //bit1 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[1] & 0x10) //GRID5
    {
      TM1638_Arr_SEG_Display[0x08] |= 0x10; //bit1 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[1] & 0x20) //GRID6
    {
      TM1638_Arr_SEG_Display[0x0A] |= 0x10; //bit1 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[1] & 0x40) //GRID7
    {
      TM1638_Arr_SEG_Display[0x0C] |= 0x10; //bit1 置位
    }
    // if (TM1638_DOWN_SEG_DisplayBuff[1] & 0x80) //GRID8
    // {
    //   TM1638_Arr_SEG_Display[0x0E] |= 0x10; //bit1 置位
    // }
  }

  {
    if (TM1638_DOWN_SEG_DisplayBuff[0] & 0x01) //GRID1
    {
      TM1638_Arr_SEG_Display[0x00] |= 0x08; //bit0 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[0] & 0x02) //GRID2
    {
      TM1638_Arr_SEG_Display[0x02] |= 0x08; //bit0 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[0] & 0x04) //GRID3
    {
      TM1638_Arr_SEG_Display[0x04] |= 0x08; //bit0 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[0] & 0x08) //GRID4
    {
      TM1638_Arr_SEG_Display[0x06] |= 0x08; //bit0 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[0] & 0x10) //GRID5
    {
      TM1638_Arr_SEG_Display[0x08] |= 0x08; //bit0 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[0] & 0x20) //GRID6
    {
      TM1638_Arr_SEG_Display[0x0A] |= 0x08; //bit0 置位
    }
    if (TM1638_DOWN_SEG_DisplayBuff[0] & 0x40) //GRID7
    {
      TM1638_Arr_SEG_Display[0x0C] |= 0x08; //bit0 置位
    }
    // if (TM1638_DOWN_SEG_DisplayBuff[0] & 0x80) //GRID8
    // {
    //   TM1638_Arr_SEG_Display[0x0E] |= 0x08; //bit0 置位
    // }
  }
}
/***************************************************************************************/

/***************************************************************************************/
/**
  * TM1638显示亮度调节
  * 参数1：0~8  0:表示显示关闭  1~8:表示8个亮度等级
  * 返回值：无
  */
void TM1638_Brightness(uint8_t light)
{
  uint8_t i;
  TM1638_Write_Data(0x44); //普通模式，固定地址，写数据到显示寄存器

  if (light < 1 || light > 8)
  {
    TM1638_Write_Data(0x80); //显示关
  }
  else
  { //正常情况下  light为1~8
    light = light - 1;
    i = 0x88 | (light & 0x07);
    TM1638_Write_Data(i); //显示开，亮度第light-1级
  }
}
/***************************************************************************************/

/***************************************************************************************/
/**
  * TM1638全清  上电后得调用
  * 参数1：无
  * 返回值：无
  */
void TM1638_Clear(void)
{
  uint8_t i;
  TM1638_Brightness(ConfigParam.RepelSetting.repel_sett_data.backlight);
  for (i = 0; i < 16; i++)
  {
    TM1638_Arr_SEG_Display[i] = 0x00;
    TM1638_Write_Addr_Bond(0XC0 + i, 0X00); //全地址写入0X00
  }
}
/***************************************************************************************/

/***************************************************************************************/
/**
  * TM1638关闭指定数码管函数
  * 参数：serial：数码管序号1-8
  * 返回值：无
  */
// void TM1638_SEG_Off(uint8_t num) //TM1638关闭指定数码管函数
// {
//   TM1638_Write_Cmd(0x44); //固定地址，写数据
//   TM1638_Write_Cmd(0x88); //显示开，亮度1

//   TM1638_Write_Addr_Bond(TM1638_Addr_SEG[num - 1], 0x80);
// }
/***************************************************************************************/

/***************************************************************************************/
/**
  * TM1638读数据函数
  * 参数：无
  * 返回值：读取的8位数据
  */
static uint8_t TM1638_Read(void) //读数据函数
{
  uint8_t i, data, temp = 0;

  DIO_1(); //DIO=1,设置为输入
  for (i = 0; i < 8; i++)
  {
    temp >>= 1;
    CLK_0();           //CLK=0
    data = DIO_Read(); //读取DIO值
    if (data)
    {
      temp |= 0x80; //按位或：与0或不变、与1或置1
    }
    CLK_1(); //CLK=1
  }
  return temp;
}
/***************************************************************************************/

/***************************************************************************************/
/**
  * TM1638读键扫数据函数
  * 参数：无
  * 返回值：读取的按键号，1~8
  */
uint8_t TM1638_ReadKey(void) //TM1638读键扫数据函数
{
  uint8_t c[4], i;
  STB_0();                 //STB=0,开始写命令
  TM1638_Write_Byte(0x42); //普通模式，地址自动增加，读键扫数据
  for (i = 0; i < 4; i++)
  {
    c[i] = TM1638_Read(); //读取键值
  }
  STB_1(); //STB=1,读键值结束

  return c[1];
}
/***************************************************************************************/

/***************************************************************************************/
/**
  * TM1638-GPIO初始化函数
  * 参数：无
  * 返回值：无
  */
static void TM1638_GPIO_Init(void)
{
  gpio_config_t io_conf;

  io_conf.intr_type = GPIO_INTR_DISABLE;
  io_conf.mode = GPIO_MODE_OUTPUT; //输出模式是针对  STB CLK 脚的
  //bit mask of the pins that you want to set,e.g.GPIO18/19
  io_conf.pin_bit_mask = (1ULL << STB_GPIO) | (1ULL << CLK_GPIO);
  //disable pull-down mode
  io_conf.pull_down_en = 0;
  //disable pull-up mode
  io_conf.pull_up_en = 0;
  //configure GPIO with the given settings
  gpio_config(&io_conf);

  io_conf.intr_type = GPIO_INTR_DISABLE;
  io_conf.mode = GPIO_MODE_INPUT_OUTPUT; //输出模式是针对  DIO 脚的
  //bit mask of the pins that you want to set,e.g.GPIO18/19
  io_conf.pin_bit_mask = (1ULL << DIO_GPIO);
  //disable pull-down mode
  io_conf.pull_down_en = 0;
  //disable pull-up mode
  io_conf.pull_up_en = 0;
  //configure GPIO with the given settings
  gpio_config(&io_conf);
}
/***************************************************************************************/

/***************************************************************************************/
/**
  * TM1638初始化函数
  * 参数：无
  * 返回值：无
  */
void TM1638_Init(void) //TM1638初始化函数
{
  TM1638_GPIO_Init(); //GPIO初始化
  TM1638_Clear();
}
/***************************************************************************************/
